import pandas as pd
import os
import re
def dataSort(datafile,outputFile):
    """
    对数据集按照日期和列名中数字编号大小进行排序，
    并将结果保存为csv文件，同时返回一个dataframe变量
    params:
        datafile:数据集文件路径
        outputFile:生成文件的保存目录
    return:
        DataFrame:排序后的数据
    """
    
    OUTFILE = '附件1数据排序.csv'
    df = pd.read_csv(datafile,encoding='utf-8')
    df['Number'] = df['分拣中心'].str.extract('(\d+)').astype(int)
    df['日期'] = pd.to_datetime(df['日期'])
    df_sorted = df.sort_values(by=['Number','日期'])
    df_sorted.drop(columns='Number',inplace=True)
    df_sorted.to_csv(outputFile+OUTFILE,index=False)
    return df_sorted
    


# def dataPivot(data,outputFile):
#     PIVOTFILE = '附件1(pivot_table).csv'
#     data_args = data.columns 
#     df = pd.pivot_table(data,values=data_args[2],columns=data_args[0],\
#                         index=data_args[1],sort=False)
#     df.to_csv(outputFile+PIVOTFILE,index=False)

def dataPivot(data, outputFile):
    PIVOTFILE = '附件1(pivot_table).csv'
    data_args = data.columns 
    df = pd.pivot_table(data, values=data_args[2], columns=data_args[0], index=data_args[1], sort=False)
    
    # 提取列名中的数字部分并排序
    sorted_columns = sorted(df.columns, key=lambda x: int(re.search(r'\d+', x).group()))
    df = df[sorted_columns]
    
    df.to_csv(outputFile + PIVOTFILE, index=True)

def createFolder(diractory,folder_name):
    """
    在指定目录下创建文件夹，并返回文件夹的完整路径。
    param:
        directory (str): 父目录的路径。
        folder_name (str): 要创建的文件夹名称。
    
    return:
        str: 新创建文件夹的完整路径。
    """
    folder_path = os.path.join(diractory,folder_name)
    if not os.path.exists(folder_path):
        os.makedirs(folder_path)
        print(f'原文件目录不存在，创建：{folder_path}')
    else:
        print(f'原文件目录已经存在，如下：{folder_path}')

    return folder_path+'/'


def main():
    GEN_FOLDER ='2024MC数据处理'
    datafile_path = './weblog/Data/2024Mathorcup数学应用挑战赛/附件/附件1.csv'
    outputFile = '.\weblog\Output'
    
    folder_generate = createFolder(outputFile,GEN_FOLDER)
    data_sorted = dataSort(datafile_path,folder_generate)
    dataPivot(data_sorted,folder_generate)


if __name__ == '__main__':
    main() 